package com.woniu.outlet.redis;

import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.woniu.outlet.po.ApplicationDetail;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;


/**
 * 添加的两个方法如果给的时间为null则为永不过期
 */
@Component
public class ERPRedisRepo {
    @Autowired
    private StringRedisTemplate redisTemplate;

//    /** 添加单个对象
//     * @param t 要添加的对象
//     * @param <T> 要添加的对象的类型
//     */
//    public <T > void  addRedis(T t,T c){
//        Field field = null;
//        try {
//            field = t.getClass().getDeclaredField("id");
//            field.setAccessible(true);
//            ValueOperations<String, String> stringStringValueOperations = redisTemplate.opsForValue();
//            stringStringValueOperations.set(t.getClass().getSimpleName()+":"+field.get(t),c.toString(),24*60*60*1000);
//        } catch (NoSuchFieldException | IllegalAccessException e) {
//            e.printStackTrace();
//        }
//    }
//
//    public <T> void  addRedis(T t, T c, Long time){
//        Field field = null;
//        try {
//            field = t.getClass().getDeclaredField("id");
//            field.setAccessible(true);
//            ValueOperations<String,String> ops = redisTemplate.opsForValue();
//            if(StringUtils.isEmpty(time)){
//                ops.set(t.getClass().getSimpleName()+field.get(t),c.toString(),time);
//            }else{
//                ops.set(t.getClass().getSimpleName()+field.get(t),c.toString());
//            }
//        } catch (NoSuchFieldException | IllegalAccessException e) {
//            e.printStackTrace();
//        }
//    }
//
//    public <T> void deleteRedis(T t){
//        Field field = null;
//        try {
//            field = t.getClass().getDeclaredField("id");
//            field.setAccessible(true);
//            redisTemplate.delete(t.getClass().getSimpleName()+":"+field.get(t));
//        } catch (NoSuchFieldException | IllegalAccessException e) {
//            e.printStackTrace();
//        }
//    }
//
//    public void deleteList(String key){
//        redisTemplate.delete(key);
//    }
//
//    public void addList(List list, String key){
//        ValueOperations<String,String> ops = redisTemplate.opsForValue();
//        ops.set(key,list.toString(),24*60*60*1000);
//    }
//
//    public <T> void addList(T t,String key,Long time){
//        ValueOperations<String,String> ops = redisTemplate.opsForValue();
//        if(!StringUtils.isEmpty(time)){
//            ops.set(key,t.toString(),time);
//        }else{
//            ops.set(key,t.toString());
//        }
//    }
//
//    public <T> T getList(T t,String key){
//        ValueOperations<String,String> ops = redisTemplate.opsForValue();
//        return (T)ops.get(key);
//    }
//
//    public <T> T getRedis(T t){
//        ValueOperations<String,String> ops = redisTemplate.opsForValue();
//        Field field = null;
//        T id = null;
//        try {
//            field = t.getClass().getDeclaredField("id");
//            field.setAccessible(true);
//            id = (T)ops.get(t.getClass().getSimpleName() +":"+ field.get(t));
//        } catch (NoSuchFieldException | IllegalAccessException e) {
//            e.printStackTrace();
//        }
//        return id;
//    }
//
//    public <T> void addMany(T key,T value){
//        ValueOperations<String,String> ops = redisTemplate.opsForValue();
//        Field field = null;
//        try {
//            field = key.getClass().getDeclaredField("id");
//            field.setAccessible(true);
//            ops.set(key.getClass().getSimpleName()+":"+field.get(key),value.toString());
//        } catch (NoSuchFieldException | IllegalAccessException e) {
//            e.printStackTrace();
//        }
//    }
//
//    public <T> void addMany(T key,T value,Long time){
//        ValueOperations<String,String> ops = redisTemplate.opsForValue();
//        Field field = null;
//        try {
//            field = key.getClass().getDeclaredField("id");
//            field.setAccessible(true);
//            if(StringUtils.isEmpty(time)){
//                ops.set(key.getClass().getSimpleName()+":"+field.get(key),value.toString(),time);
//            }else {
//                ops.set(key.getClass().getSimpleName()+":"+field.get(key),value.toString());
//            }
//        } catch (NoSuchFieldException | IllegalAccessException e) {
//            e.printStackTrace();
//        }
//    }

    public void addList(String key,String value){
        ValueOperations<String, String> ops = redisTemplate.opsForValue();
        ops.set(key, value);
    }

    public String getList(String key){
        ValueOperations<String, String> ops = redisTemplate.opsForValue();
        return ops.get(key);
    }

    public void deleteList(String key){
        redisTemplate.delete(key);
    }

}
